Solving Puzzle with Chain Effect

Project Overview
Project Type: Personal
Focus: Game Production
Role: Game Designer and Programmer
Game Engine: Unreal 4
Language: Unreal Blueprint
Description:
Trial of Chains (Puzzle) is a slow-paced puzzle.
The player will act as an adventurer collect lost runes in mystical floating islands. The rule of thumb
to pass all levels it to make most use of all props in levels.
Controls:
- Arrow keys / WSAD = move
- Space / Enter / E / Num 0 = attack
- Esc = pause
- R = restart current level
- C = toggle camera view
- F11 = toggle fullscreen / windowed
Features:
▪ Game Design & Programming
▪ Turn-based Chain Effect
▪ Square Grids of Board
▪ Reusable Gameplay Kit
▪ Puzzle with Infinite Combinations
▪ Progression of Difficulty
▪ UI (Loading, Level, Complete)
Part 01 - Star
The star is the goal to pass the level. Every level only has one star which is the goal that the player
is trying to reach.
Star
Star Behaviors::
Initialize to the coordinate (Vector 2D) into the grid board.
When it is collected by character,
▪ Play win SE
▪ Change VFX to win Niagara System for 0.3s
▪ Disable character movement
▪ Play level complete SE
▪ Fade out level BGM
▪ Create UI Widget of Level Complete
▪ Set off the flag of IsInLevel (for game pause and new level
initialization)
Star Behavior part I
Star Behavior part II
/01 - Star.jpg)
Star
Initialize to the coordinate (Vector 2D) into the grid board.
When it is collected by character,
▪ Play win SE
▪ Change VFX to win Niagara System for 0.3s
▪ Disable character movement
▪ Play level complete SE
▪ Fade out level BGM
▪ Create UI Widget of Level Complete
▪ Set off the flag of IsInLevel (for game pause and new level initialization)
/01 - Star Behavior part I.jpg)
Star Behavior part I
/01 - Star Behavior part II.jpg)
Star Behavior part II
Part 02 - Door
Door blocks the character, until it’s open. It is controlled by a switch (pad) in the level. The player
needs to figure out the specific switch controlling it. However, projectiles from Turret can fly through
it.
Door
Door Behaviors::
Initialize to the coordinate (Vector 2D) into the grid board.
When it’s Open,
▪ Set grid engagement to self
▪ move the door mesh to on location
When it’s Closed,
▪ Set grid engagement to null
▪ Move the door mesh to off location
Door Variables
Door Behaviors
/02 - Door.jpg)
Door
Initialize to the coordinate (Vector 2D) into the grid board.
When it’s Open,
▪ Set grid engagement to self
▪ move the door mesh to on location
When it’s Closed,
▪ Set grid engagement to null
▪ Move the door mesh to off location
/02 - Door Variables.jpg)
Door Variables
/02 - Door Behaviors.jpg)
Door Behaviors
Part 03 - Toggle Pad
When the character or a box moves onto the pad, it’s on; when the character or a box moves onto it
again, it’s off. When it’s on, the controlling item will be triggered with according behavior.
Toggle Pad
Toggle Pad Behaviors::
Initialize to the coordinate (Vector 2D) into the grid board.
Set On
▪ Change light color to on color
▪ Play trigger on SE,
▪ Trigger control item
Set Off
▪ Change light color to off color
▪ Play trigger off SE
Toggle Pad Event - OnBeginOverlap
Toggle Pad Event - SetOn/SetOff
/03 - Toggle Pad.jpg)
Toggle Pad
Initialize to the coordinate (Vector 2D) into the grid board.
Set On
▪ Change light color to on color
▪ Play trigger on SE,
▪ Trigger control item
Set Off
▪ Change light color to off color
▪ Play trigger off SE
/03 - Toggle Pad Event - OnBeginOverlap.jpg)
Toggle Pad Event - OnBeginOverlap
/03 - Toggle Pad Event - SetOn-SetOff.jpg)
Toggle Pad Event - SetOn/SetOff
Part 04 - Box
Box can be pushed around by the character. Box also can be moved by getting hit from projectiles which
is shot from turret. When box push to water, it will drop down and fill the water to make the grid
passable for the character.
Box
Box Main Behaviors::
Initialize to the coordinate (Vector 2D) into the grid board.
Get Hit from Source, (if it can be pushed)
▪ Move the box to the target grid location
▪ Update box coordinate
▪ Update character move grids
▪ Disable character movement for a short time (to fix a possible bug)
Drop Down
▪ Move the box to the target location
▪ Set engagement for the new coordinate.
Box Event - Get Hit from Source
Box Event - Drop Down
/04 - Box.jpg)
Box
Initialize to the coordinate (Vector 2D) into the grid board.
Get Hit from Source, (if it can be pushed)
▪ Move the box to the target grid location
▪ Update box coordinate
▪ Update character move grids
▪ Disable character movement for a short time (to fix a possible bug)
Drop Down
▪ Move the box to the target location
▪ Set engagement for the new coordinate.
/04 - Box Event - Get Hit from Source.jpg)
Box Event - Get Hit from Source
/04 - Box Event - Drop Down.jpg)
Box Event - Drop Down
Part 05 - Keep Pad
When the character or a box is on the pad, it’s on; when nothing is on it, it’s off. When it’s on, the
controlling item will be triggered with according behavior.
Keep Pad
Keep Pad Behaviors::
Initialize to the coordinate (Vector 2D) into the grid board.
Toggle state
On Begin Overlap to Set On;
End Begin Overlap to Set Off
Set On
▪ Change light color to on color,
▪ Play trigger on SE
▪ Trigger control item on
Set Off
▪ Change light color to off color,
▪ Play trigger off SE
▪ Trigger control item off
Keep Pad Event - OnBeginOverlap
Keep Pad Event - SetOn/SetOff
/05 - Keep Pad.jpg)
Keep Pad
Initialize to the coordinate (Vector 2D) into the grid board.
Toggle state
On Begin Overlap to Set On;
End Begin Overlap to Set Off
Set On
▪ Change light color to on color,
▪ Play trigger on SE
▪ Trigger control item on
Set Off
▪ Change light color to off color,
▪ Play trigger off SE
▪ Trigger control item off
/05 - Keep Pad Event - OnBeginOverlap.jpg)
Keep Pad Event - OnBeginOverlap
/05 - Keep Pad Event - SetOn-SetOff.jpg)
Keep Pad Event - SetOn/SetOff
Part 06 - Turret & Projectile
Turret can shoot the projectile along its facing direction.
Projectile can hit box to move it. Projectile can deal damage to the character.
Projectile
Turret
Behaviors::
Initialize to the coordinate (Vector 2D) into the grid board.
Turret Shoot
▪ Spawn a projectile at barrel front end
▪ Play shoot SE
▪ Start barrel recoil animation
Projectile Hit Event:
▪ Destroy particle system
▪ Spawn hit VFX;
▪ Play hit SE
▪ If it hits character, character takes damage; if it hits box, move it
if pushable.
Turret Event - Shoot
Projectile Event - Hit
Projectile can hit box to move it. Projectile can deal damage to the character.
/06 - Projectile.jpg)
Projectile
/06 - Turret.jpg)
Turret
Initialize to the coordinate (Vector 2D) into the grid board.
Turret Shoot
▪ Spawn a projectile at barrel front end
▪ Play shoot SE
▪ Start barrel recoil animation
Projectile Hit Event:
▪ Destroy particle system
▪ Spawn hit VFX;
▪ Play hit SE
▪ If it hits character, character takes damage; if it hits box, move it if pushable.
/06 - Turret Event - Shoot.jpg)
Turret Event - Shoot
/06 - Projectile Event - Hit.jpg)
Projectile Event - Hit
Part 07 - Board & Controller
Grid Board is initialized in game instance InitLevel Event, the board size is adjustable. All items in
levels are stored in an array of customized structure. The player can simply use arrow keys or mouse
click to move the character.
Board
Game Instance Init Board
Toggle Camera Following
/07 - Board.png)
Board
/07 - Game Instance Init Board.jpg)
Game Instance Init Board
/07 - Toggle Camera Following.jpg)
Toggle Camera Following
Reflection
This project is a retro to JRPG and Go series of Puzzle. I'm very ambitious for it. It can be modified
to a pure puzzle, a dungeon RPG, a TRPG and more. Many systems are built for later iterations.
▪ In terms of Design, get inspired by Lara Croft Go and Into the Breach, I was thinking
about creating more
connections between items. At the same time, I was trying to keep the game simple in input.
▪ In terms of Programming, When I was dealing with those item connections, interface is
very helpful to make multi-behaviors.
▪ To make the level design easier, I spent part of time on level design tool, so that I could
edit the level staticly in editor before running.
▪ For UI design, I realized UMG can be nested and reusable. By creating customized event
dispatcher, the same UI component can have different behaviors when it's resused.
▪ To make the game both static and dynamic, or say closed for finished levels and open for new
level design, the system supports both reading data from a datatable or from current level layout.
▪ I'm still thinking about Synergy and Emergent Gameplay. With this project, I guess I'm closer
to the essential of elegant system design.
▪ There is a hard decision: Can player move when an item is activating and moving?
Plan A: To confine movement, so there will be less unexpected
bugs. But there will
be less gameplay
possibility as well.
Plan B: To give players freedom, so it will be more likely to have
emergent
gameplay. But more bugs
are there.
Due to time and energy, I chose Plan A so far. But in the future, I will try Plan B.
▪ In terms of Design, get inspired by Lara Croft Go and Into the Breach, I was thinking about creating more connections between items. At the same time, I was trying to keep the game simple in input.
▪ In terms of Programming, When I was dealing with those item connections, interface is very helpful to make multi-behaviors.
▪ To make the level design easier, I spent part of time on level design tool, so that I could edit the level staticly in editor before running.
▪ For UI design, I realized UMG can be nested and reusable. By creating customized event dispatcher, the same UI component can have different behaviors when it's resused.
▪ To make the game both static and dynamic, or say closed for finished levels and open for new level design, the system supports both reading data from a datatable or from current level layout.
▪ I'm still thinking about Synergy and Emergent Gameplay. With this project, I guess I'm closer to the essential of elegant system design.
▪ There is a hard decision: Can player move when an item is activating and moving?
Plan A: To confine movement, so there will be less unexpected bugs. But there will be less gameplay possibility as well.
Plan B: To give players freedom, so it will be more likely to have emergent gameplay. But more bugs are there.
Due to time and energy, I chose Plan A so far. But in the future, I will try Plan B.